package com.yzd.learnjava.generics;

public class InheritBounds {
	public static void main(String[] args) {
		Solid2<Bounded> solid2 = new Solid2(new Bounded());
		solid2.color();
		solid2.getY();
		solid2.weight();
	}
}

class HoldItem<T>{
	T item ;
	public HoldItem(T item) {
		this.item = item;
	}
	
	T getItem() {
		return item;
	}
}

class Colored2<T extends HasColor> extends HoldItem<T>{
	Colored2(T item){
		super(item);
	}
	
	java.awt.Color color(){
		return item.getColor();
	}
}

class ColoredDimesion2<T extends Dimension & HasColor> extends Colored2<T>{
	public ColoredDimesion2(T item) {
		super(item);
	}
	
	public int getX() {return item.x;}
	public int getY() {return item.y;}
	public int getZ() {return item.z;}
}

class Solid2<T extends Dimension & HasColor & Weight> extends ColoredDimesion2<T>{
	public Solid2(T item) {
		super(item);
	}
	
	public int weight() {
		return item.weight();
	}
}
